import {
  FileEntity,
  FileEntityFileType,
  FileEntityType,
} from '../entities/file.entity';

export class ApiFileGetUploadTokenDto {
  /**
   * 上传类型
   * @enum [1, 2, 3, 4]
   * @example 1
   */
  t: number;

  // 模块（用于分辨用途）
  route?: string;

  // 指定上传路径
  path?: string;

  // 指定文件名
  fileName?: string;

  // 项目ID
  projectId?: string;

  // 标签
  tags?: string[];
}

/**
 * [API] 获取文件上传 upToken
 */
export class ApiFileGetUpTokenDto {
  /**
   * 上传类型
   * @enum [1, 2, 3, 4]
   * @example 1
   */
  t: number;
  /**
   * 文件大小
   */
  size: number;
  /**
   * 唯一ID用于回调
   */
  uid: string;
  filename?: string;
  name?: string;
  type?: FileEntityFileType;
  w?: number;
  h?: number;
}

/**
 * 【内部方法】七牛文件上传回调
 */
export class ApiFileAfterUploadMongoDto {
  key?: string;
  hash: string;
  url: string;
  ftype: FileEntityFileType;
  fsize: number;
  bucket: 'mengti' | 'mtcdn';
  name?: string;
  teamId?: number;
  uid: string;
  w: number;
  h: number;
  persistentId?: string;
  avinfo?: string;
  file_id?: number;
}

/**
 * 【内部方法】七牛文件上传回调
 */
export class ApiFileAfterUploadDto {
  key?: string;
  hash: string;
  ftype: FileEntityFileType;
  fsize: number;
  bucket: 'mengti' | 'mtcdn';
  name?: string;
  shop_id?: number;
  uid: string;
  w: number;
  h: number;
  persistentId?: string;
  avinfo?: string;
  file_id?: number;
}

/**
 * @name 文件转码回调
 */
export class ApiFileAfterFormatDto {
  code: number;
  persistentId: string;
  bucket: string;
  hash: string;
  items: VideoFormatItem[];
}

interface VideoFormatItem {
  cmd: string;
  hash: string;
  code: number;
  key: string;
}

/**
 * 拉取远程文件接口
 */
export class ApiFileFetchDto {
  urls: string[];
}

export class ApiFileFetchResult {
  /**
   * 批量拉取结果
   * 注意： 元素可能为空 如果拉取失败的话 需要判断
   */
  hashs: string[];
  file_ids: number[];
}

/**
 * [API] 获取文件列表
 */
export class ApiFileGetDto {
  // 主键ID 如果传入ID则只返回一个项目
  id?: number;
  currentPage?: number;
  pageSize?: number;
  /**
   * 是否返回总量统计
   */
  count?: boolean;
  filterForm?: {
    /**
     * 文件类型
     * 1 图片
     * 2 视频
     * 3 音频
     * 4 文件
     */
    t?: 1 | 2 | 3 | 4;
    /**
     * 查询本人上传的文件
     */
    user_id?: number;
    /**
     * 查询本店上传的问题
     */
    shop_id?: number;
    /**
     * 通过hash值搜索
     */
    hash?: string;
  };
}
